package ljl.alg.jianzhioffer.round2;

/*
* 1. 从头到尾遍历，不推荐
* 2. 二分
* */
public class _11_rotate_array_min_value {
    
    /**
     * 我日，二分不会写了，没有思路
     *
     * 我日看了半天，现在迷迷糊糊
     * */
    public int minArray(int[] numbers) {
        int l = 0, r = numbers.length - 1;
        while (l < r) {
            int m = (l + r) / 2;
            if (numbers[m] < numbers[r]) r = m;
            else if (numbers[m] > numbers[r]) l = m + 1;
            else
                // 还是没真正理解！
                /* j--; 是可以的*/
            
            // 这个循环要从 l 开始找，从 m 开始找就不对了， 考虑 0 1 1 1
            {
                int min = numbers[l];
                for (int i = l + 1; i < r; i++) {
                    if (numbers[i] < min) min = numbers[i];
                }
                return min;
            }
        }
        return numbers[l];
    }
    
}
